package org.linlinjava.litemall.db.dao.app;

import org.apache.ibatis.annotations.Param;
import org.linlinjava.litemall.db.domain.AgedmallStore;
import org.linlinjava.litemall.db.domain.AgedmallSubscribeToInform;
import org.linlinjava.litemall.db.domain.LitemallGoods;
import org.linlinjava.litemall.db.vo.app.AgedmallPartsVo;
import org.linlinjava.litemall.db.vo.app.HomeGoodsListVo;
import org.linlinjava.litemall.db.vo.app.StoreGoodsProductVo;
import org.linlinjava.litemall.db.vo.app.StoreGoodsVo;

import java.math.BigDecimal;
import java.util.List;

public interface AppGoodsMapper {
    List<Integer> list(@Param("province") String province, @Param("city") String city,
                       @Param("storeId") Integer storeId, @Param("catId") Integer catId,
                       @Param("goodsType") String goodsType, @Param("brandId") Integer brandId,
                       @Param("keywords") String keywords, @Param("isHot") Integer isHot, @Param("isNew") Integer isNew,
                       @Param("sort") String sort, @Param("order") String order,
                       @Param("hospitalGoodsList") List<Integer> hospitalGoodsList);

    List<StoreGoodsVo> queryCustomList(@Param("province") String province, @Param("city") String city);

    StoreGoodsVo getStoreGoodsById(@Param("id") Integer id);

    List<StoreGoodsVo> getStoreGoodsListByIds(@Param("ids") List<Integer> ids);

    StoreGoodsVo getStoreGoodsByGoodsId(@Param("goodsId") Integer goodsId, @Param("storeId") Integer storeId);

    int getCountByStoreId(@Param("storeId") Integer storeId, @Param("goodsType") String goodsType);

    int getCountByStoreIdAndLocation(@Param("storeId") Integer storeId, @Param("goodsType") String goodsType,
                                     @Param("province") String province, @Param("city") String city);

    List<StoreGoodsVo> queryByIdList(@Param("idList") List<Integer> idList);

    List<StoreGoodsVo> queryByGoodsIdList(@Param("idList") List<Integer> idList);

    List<StoreGoodsVo> queryCartRecommendList(@Param("province") String province, @Param("city") String city);

    int countCartRecommendList(@Param("province") String province, @Param("city") String city);

    List<AgedmallPartsVo> queryParts(@Param("specInfoId") Integer specInfoId, @Param("storeId") Integer storeId);

    List<AgedmallPartsVo> queryPartsList(@Param("specIdList") List<Integer> specIdList, @Param("storeIdList") List<Integer> storeIdList);

    List<AgedmallPartsVo> queryServices(@Param("specInfoId") Integer specInfoId);

    List<AgedmallPartsVo> queryServicesList(@Param("specIdList") List<Integer> specIdList);

    List<StoreGoodsProductVo> getStoreGoodsProductList(@Param("storeId") Integer storeId, @Param("goodsId") Integer goodsId, @Param("type") String type);

    StoreGoodsProductVo getStoreGoodsProduct(@Param("storeId") Integer storeId, @Param("goodsId") Integer goodsId, @Param("productId") Integer productId);

    List<StoreGoodsProductVo> getStoreGoodsProductListByProductIds(@Param("productIdList") List<Integer> productIdList);

    StoreGoodsProductVo getStoreGoodsProductById(@Param("storeProductId") Integer storeProductId);

    List<HomeGoodsListVo> homeGoodsList(@Param("categoryId") Integer categoryId, @Param("subCategoryId") Integer subCategoryId,
                                        @Param("type") String type, @Param("searchKey") String searchKey);

    List<StoreGoodsVo> getStoreGoodsByGoodsIdAndLngLat(@Param("goodsId") Integer goodsId, @Param("lng") BigDecimal lng,
                                                       @Param("lat") BigDecimal lat, @Param("city") String city,
                                                       @Param("hospitalStoreList") List<Integer> hospitalStoreList);

    List<Integer> getHospitalGoods(@Param("id") Integer id, @Param("type") Integer type);

    String getBusiIdByGoodsId(@Param("id") Integer id);

    List<AgedmallSubscribeToInform> getHaveSubscribeNotice(@Param("goodsId") Long goodsId, @Param("skuId") Long skuId);

    List<AgedmallStore> getNearByStoreIdsByLngAndLat(@Param("type") Integer type,
                                                     @Param("lng") BigDecimal lng,
                                                     @Param("lat") BigDecimal lat);
}
